// �������

package Leetcode;



class solution_002 {
	

	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		// ����ͷ�ڵ㣬�ڵ�����ͽ�λ
		ListNode listNode = new ListNode();
		ListNode nextNode = listNode;
		int index = l1.val + l2.val;
		// �ȼ����һλ����Ȼͷ�ڵ�ʼ��Ϊ0
		if (index >= 10) {
			nextNode.val = index % 10;
			index = 1;
		} else {
			nextNode.val = index;
			index = 0;
		}
		l1 = l1.next;
		l2 = l2.next;
		// ��l1��l2�����ǿսڵ�ʱ
		for (; l1 != null | l2 != null;) {
			// ���Ϊ�գ���ֵΪ0
			int value1, value2 = 0;
			if (l1 == null) {
				value1 = 0;
			} else {
				value1 = l1.val;
			}
			if (l2 == null) {
				value2 = 0;
			} else {
				value2 = l2.val;
			}
			index = value1 + value2 + index;
			// ��ֵ����
			if (index >= 10) {
				ListNode node = new ListNode(index % 10);
				nextNode.next = node;
				nextNode = nextNode.next;
				index = 1;
			} else {
				ListNode node = new ListNode(index);
				nextNode.next = node;
				nextNode = nextNode.next;
				index = 0;
			}
			// ��l1��l2��Ϊ������һ���ڵ�Ҳ�������ƶ�����һ���ڵ㡣
			if (l1 != null) {
				if (l1.next != null) {
					l1 = l1.next;
				} else {
					l1 = null;
				}
			}
			if (l2 != null) {
				if (l2.next != null) {
					l2 = l2.next;
				} else {
					l2 = null;
				}
			}
		}
		// ������н�λʱ�ٽ��и�ֵ
		if (index == 1) {
			ListNode node = new ListNode(index);
			nextNode.next = node;
		}
		// ����ͷ�ڵ�
		return listNode;
	}
}

// ��������˼����ˣ���������ȫ������111+023=134�����Ǵ���ʵ�ֺ����
// С���ɣ������������⣬���ؽ��Ϊͷ���ʱ��ͨ����Ҫ�ȳ�ʼ��һ��Ԥ��ָ�� pre��
// ��ָ�����һ���ڵ�ָ��������ͷ��� head��
// ʹ��Ԥ��ָ���Ŀ������������ʼ��ʱ�޿��ýڵ�ֵ��
// �����������������Ҫָ���ƶ���
// �����ᵼ��ͷָ�붪ʧ���޷����ؽ����

public class Solution002 {
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode listNode = new ListNode(0);
		ListNode nextNode = listNode;
		int index = 0;
		// ����ʹ��while
		while (l1 != null | l2 != null) {
			// �����������Ŀ���������if-else
			int value1 = l1 == null ? 0 : l1.val;
			int value2 = l2 == null ? 0 : l2.val;
			index = value1 + value2 + index;
			// ����������ÿһλ�ж��Ƿ���Ҫ��λ��ֻҪ�ж����һλ�Ƿ��λ������
			ListNode node = new ListNode(index % 10);
			nextNode.next = node;
			nextNode = nextNode.next;
			index = index / 10;
			// ����l1��l2������������Ҫ�ж�next�Ƿ�Ϊ��
			if (l1 != null)
				l1 = l1.next;
			if (l2 != null)
				l2 = l2.next;
		}
		if (index == 1) {
			ListNode node = new ListNode(index);
			nextNode.next = node;
		}
		// ����ͷ�ڵ����һλ�ڵ㣬��Ϊͷ�ڵ������Ϊ0
		return listNode.next;
	}
}
